package com.kotlin.myapplicationd.base;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;


import com.kotlin.myapplicationd.MApplication;
import com.kotlin.myapplicationd.R;
import com.kotlin.myapplicationd.tools.ToolAlert;

import java.io.Serializable;

public class Operation {

    /**
     * 激活Activity组件意图
     **/
    private Intent mIntent = new Intent();
    /***
     * 上下文
     **/
    private Activity mContext = null;
    /***
     * 整个应用Applicaiton
     **/
    private MApplication mApplication = null;

    public Operation(Activity mContext) {
        this.mContext = mContext;
        mApplication = (MApplication) this.mContext.getApplicationContext();
    }

    /**
     * 跳转Activity
     *
     * @param activity 需要跳转至的Activity
     */
    public void forward(Class activity) {
        forward(activity.getName());
    }

    /**
     * 跳转Activity
     */
    public void forward(String className) {
        forward(className, IBaseActivity.NONE);
    }

    /**
     * 跳转Activity
     * startActivityForResult
     */
    public void startActivityForResult(Class className, int requestCode) {
        mIntent.setClass(mContext, className);
        mContext.startActivityForResult(mIntent, requestCode);

    }

    /**
     * 跳转Activity
     * setResult
     */
    public void setResult(int requestCode) {
        //mIntent.setClass(mContext, className);
        mContext.setResult(requestCode, mIntent);

    }

    /**
     * 跳转Activity
     *
     * @param animaType 动画类型IBaseActivity.LEFT_RIGHT/TOP_BOTTOM/FADE_IN_OUT
     */
    public void forward(String className, int animaType) {
        mIntent.setClassName(mContext, className);
        mIntent.putExtra(IBaseActivity.ANIMATION_TYPE, animaType);
        mContext.startActivity(mIntent);
        switch (animaType) {
            case IBaseActivity.LEFT_RIGHT:
                mContext.overridePendingTransition(R.anim.base_slide_right_in, R.anim.base_slide_remain);
                //mContext.overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right);
                break;
            case IBaseActivity.TOP_BOTTOM:
                mContext.overridePendingTransition(R.anim.push_up_in, R.anim.push_up_out);
                break;
            case IBaseActivity.FADE_IN_OUT:
                mContext.overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
                break;
            default:
                break;
        }
    }


    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void addParameter(String key, Bundle value) {
        mIntent.putExtra(key, value);
    }

    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void addParameter(String key, Serializable value) {
        mIntent.putExtra(key, value);
    }

    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void addParameter(String key, String value) {
        mIntent.putExtra(key, value);
    }


    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void addParameter(String key, int value) {
        mIntent.putExtra(key, value);
    }


    /**
     * 设置传递参数
     *
     * @param key   参数key
     * @param value 数据传输对象
     */
    public void addParameter(String key, long value) {
        mIntent.putExtra(key, value);
    }

    public void addParameter(String key, double value) {
        mIntent.putExtra(key, value);
    }

    public void addParameter(String key, boolean value) {
        mIntent.putExtra(key, value);
    }

    public void addParameter(String key, Parcelable value) {
        mIntent.putExtra(key, value);
    }

    /**
     * 设置Uri
     *
     * @param uri
     */
    public void setData(Uri uri) {
        mIntent.setData(uri);
    }

    /**
     * 设置flag
     *
     * @param flag
     */
    public void setFlag(int flag) {
        mIntent.setFlags(flag);
    }


    /**
     * 弹出等待对话框
     *
     * @param message 提示信息
     */
    public void showLoading(String message) {
        ToolAlert.loading(mContext, message);
    }

    /**
     * 弹出等待对话框
     *
     * @param message  提示信息
     * @param listener 按键监听器
     */
    public void showLoading(String message, ToolAlert.ILoadingOnKeyListener listener) {
        ToolAlert.loading(mContext, message, listener);
    }

    /**
     * 更新等待对话框显示文本
     *
     * @param message 需要更新的文本内容
     */
    public void updateLoadingText(String message) {
        ToolAlert.updateProgressText(message);
    }

    /**
     * 关闭等待对话框
     */
    public void closeLoading() {
        ToolAlert.closeLoading();
    }


    public boolean getParameter(String key) {
        return mIntent.getBooleanExtra(key, false);
    }

}
